6. 컨테이너 런타임 용어집
컨테이너 런타임 용어집
A. 기본 개념
컨테이너 런타임 (Container Runtime)
- 정의: 컨테이너를 생성하고 실행하는 소프트웨어
- 분류:
- 고수준 런타임: 이미지, 네트워크 관리 (Docker, containerd, CRI-O)
- 저수준 런타임: 실제 격리 환경 생성 (runc, gVisor, Kata)
OCI (Open Container Initiative)
- 정의: 컨테이너 표준을 제정하는 단체 (Linux Foundation 산하)
- 설립: 2015년 Docker, Google, CoreOS 등이 참여
- 목적: 벤더 중립적 컨테이너 표준 확립
B. OCI 표준 규격
OCI Runtime Specification
- 정의: 컨테이너 실행 환경 표준 규격
- 내용: config.json 형식, 컨테이너 생명주기, 네임스페이스/cgroups 설정
- 준수 런타임: runc, crun, gVisor, Kata Containers
OCI Image Specification
- 정의: 컨테이너 이미지 포맷 표준 규격
- 구성요소:
- 매니페스트 (Manifest): 이미지 설계도, 레이어와 구성 파일 참조
- 레이어 (Layer): 파일시스템 변경 사항 tar 아카이브
- 구성 파일 (Configuration): 실행 설정 (Entrypoint, Cmd, Env)
- 인덱스 (Index): 멀티 아키텍처 매니페스트 목록
OCI Distribution Specification
- 정의: 레지스트리 통신 API 표준 규격
- 내용: 이미지 push/pull API, blob 저장/조회
- 기반: Docker Registry HTTP API v2
디스크립터 (Descriptor)
- 정의: 다른 컴포넌트를 참조하는 메타데이터
- 포함 정보: mediaType, digest, size
다이제스트 (Digest)
- 정의: 컴포넌트의 SHA256 해시값
- 용도: 무결성 검증, 고유 식별
C. 고수준 런타임 (CRI Runtime)
CRI (Container Runtime Interface)
- 정의: kubelet과 컨테이너 런타임 간 통신을 위한 쿠버네티스 표준 API
- 프로토콜: gRPC
- 서비스:
- RuntimeService: 파드/컨테이너 라이프사이클 관리
- ImageService: 이미지 관리
containerd
- 정의: CNCF 프로젝트, Docker에서 분리된 CRI 런타임
- 사용처: EKS, GKE, AKS의 기본 런타임
- 특징: 플러그인 아키텍처, nerdctl CLI 지원
CRI-O
- 정의: Red Hat 주도, 쿠버네티스 전용 경량 CRI 런타임
- 사용처: OpenShift의 기본 런타임
- 특징: Podman과 코드 공유 (containers 조직)
Docker (dockerd)
- 정의: Docker의 핵심 서버 프로세스
- 아키텍처: 클라이언트-서버 구조
- 내부: containerd를 통해 컨테이너 실행
Podman
- 정의: Red Hat이 개발한 데몬리스 컨테이너 런타임
- 특징:
- Docker CLI 호환
- 루트리스(Rootless) 지원
- 쿠버네티스 매니페스트 지원 (generate/play kube)
데몬리스 (Daemonless)
- 정의: 중앙 데몬 없이 각 컨테이너가 독립 실행되는 아키텍처
- 장점: 단일 장애점 없음, 보안 강화
루트리스 (Rootless)
- 정의: root 권한 없이 일반 사용자로 컨테이너 실행
- 장점: 보안 강화, 권한 분리
D. 저수준 런타임 (OCI Runtime)
runc
- 정의: OCI Runtime Specification의 참조 구현체
- 전신: Docker의 libcontainer
- 역할: 네임스페이스/cgroups 설정, 실제 컨테이너 프로세스 생성
crun
- 정의: C 언어로 작성된 경량 OCI 런타임
- 특징: runc 대안, 더 빠른 시작 시간
gVisor
- 정의: Google이 개발한 보안 강화 OCI 런타임
- 원리: 사용자 공간 커널로 호스트 커널과 강력 격리
- 구성요소:
- Sentry: 시스템 콜을 가로채 사용자 공간에서 처리
- Gofer: 호스트 파일시스템 접근 프록시
- runsc: OCI 호환 CLI
- 사용처: GKE Sandbox
Kata Containers
- 정의: OpenStack Foundation에서 개발한 VM 기반 OCI 런타임
- 원리: 각 컨테이너를 별도 경량 VM에서 실행
- 구성요소:
- kata-runtime: OCI 호환 CLI
- kata-agent: VM 내부 에이전트
- 요구사항: Intel VT-x / AMD-V 하드웨어 가상화
Firecracker
- 정의: AWS가 개발한 초경량 VMM (Virtual Machine Monitor)
- 성능: ~125ms 부팅, ~5MB 메모리 오버헤드
- 사용처: AWS Lambda, Fargate
E. Linux 커널 격리 기술
네임스페이스 (Namespace)
- 정의: 프로세스가 보는 시스템 자원을 격리하는 커널 기능
- 종류:
- pid: 프로세스 ID 격리
- net: 네트워크 인터페이스 격리
- mnt: 파일시스템 마운트 격리
- uts: 호스트명/도메인 격리
- ipc: 프로세스 간 통신 격리
- user: 사용자 ID 격리
cgroups (Control Groups)
- 정의: 프로세스 그룹의 자원 사용량을 제한/모니터링하는 커널 기능
- 제어 가능 자원: CPU, 메모리, 블록 I/O, 네트워크
seccomp (Secure Computing Mode)
- 정의: 프로세스가 호출할 수 있는 시스템 콜을 제한하는 보안 기능
- 용도: 위험한 시스템 콜 차단
AppArmor / SELinux
- 정의: 강제적 접근 제어(MAC) 시스템
- 역할: 파일, 네트워크 등에 대한 세밀한 접근 제어
Capabilities
- 정의: 루트 권한을 세분화하여 제한하는 기능
- 예시: CAP_NET_ADMIN, CAP_SYS_ADMIN, CAP_CHOWN
F. 파일시스템 관련
rootfs (루트 파일시스템)
- 정의: 컨테이너가
/로 인식하는 최상위 디렉터리 구조 - 생성: 이미지 레이어를 병합하여 생성
config.json
- 정의: 컨테이너 실행 환경 설정 파일 (OCI 표준)
- 내용: 실행 명령, 환경 변수, 네임스페이스, cgroups 설정
파일시스템 번들 (Filesystem Bundle)
- 정의: 컨테이너 생성에 필요한 파일 구조
- 구성: config.json + rootfs 디렉터리
오버레이 파일시스템 (Overlay Filesystem)
- 정의: 여러 레이어를 겹쳐 하나의 파일시스템처럼 보이게 하는 기술
- 용도: 컨테이너 이미지의 레이어를 효율적으로 병합
G. 프로세스 및 신호
시스템 콜 (System Call)
- 정의: 애플리케이션이 커널 기능을 요청하는 인터페이스
- 예시: open(), read(), write(), fork()
사용자 공간 (User Space)
- 정의: 일반 애플리케이션이 실행되는 영역
- 특징: 커널 기능에 직접 접근 불가, 시스템 콜 통해 요청
커널 공간 (Kernel Space)
- 정의: OS 커널이 실행되는 영역
- 특징: 하드웨어에 직접 접근 가능
Signal (신호)
- 정의: 프로세스에게 이벤트를 알리는 메커니즘
- 주요 신호:
- SIGTERM (15): 정상 종료 요청 (무시 가능)
- SIGKILL (9): 강제 종료 (무시 불가)
- SIGHUP (1): 설정 재로드 요청
- SIGINT (2): 인터럽트 (Ctrl+C)
- SIGSTOP (19): 프로세스 일시 정지
H. 컨테이너 생명주기
컨테이너 상태
creating → created → running → stopped
- creating: 컨테이너 생성 중
- created: 컨테이너 생성 완료, 실행 전
- running: 컨테이너 실행 중
- stopped: 컨테이너 중지됨
생명주기 훅 (Lifecycle Hooks)
- 정의: 컨테이너 상태 전이 시 실행되는 사용자 정의 스크립트
- 종류: prestart, poststart, poststop
I. 보조 컴포넌트
shim 플러그인
- 정의: 고수준 런타임과 OCI 런타임 사이를 연결하는 어댑터
- 역할: 각 런타임(runc, kata 등)에 맞는 인터페이스 제공
conmon (Container Monitor)
- 정의: 각 컨테이너의 입출력과 로그를 관리하는 프로세스
- 사용처: Podman, CRI-O
파드 샌드박스 (Pod Sandbox)
- 정의: 파드의 네트워크 네임스페이스를 유지하는 특수 컨테이너
- 별칭: pause 컨테이너
CNI 플러그인
- 정의: 컨테이너 네트워크 인터페이스를 설정하는 플러그인
- 역할: 파드에 IP 주소 할당
J. 빌드 관련
BuildKit
- 정의: 고성능 이미지 빌드 엔진
- 특징: 병렬 빌드, 향상된 캐싱, 빌드 시크릿 지원
nerdctl
- 정의: containerd용 Docker 호환 CLI
- 프로젝트: containerd 서브 프로젝트
stargz-snapshotter
- 정의: 이미지 풀 속도를 높이는 containerd 플러그인
- 원리: 필요한 레이어만 먼저 다운로드 (lazy pulling)
K. 레지스트리 관련
컨테이너 레지스트리
- 정의: 컨테이너 이미지를 저장하고 배포하는 서버
- 예시: Docker Hub, GCR, ECR, Harbor
Blob
- 정의: 레지스트리에 저장된 바이너리 데이터
- 용도: 레이어나 구성 파일 저장
태그 (Tag)
- 정의: 이미지 버전을 식별하는 이름
- 예시: latest, v1.0, stable
카탈로그 (Catalog)
- 정의: 레지스트리에 저장된 모든 리포지토리 목록
L. 하이퍼바이저 관련
하이퍼바이저 (Hypervisor)
- 정의: 가상머신을 생성하고 관리하는 소프트웨어
- 예시: QEMU, KVM, Firecracker
경량 가상머신 (Lightweight VM)
- 정의: 최소 리소스로 빠르게 부팅되는 가상머신
- 별칭: 마이크로VM
vsock
- 정의: VM과 호스트 간 통신을 위한 소켓
- 용도: kata-agent가 호스트와 통신 시 사용
Intel VT-x / AMD-V
- 정의: 하드웨어 가상화 지원 기능
- 용도: Kata Containers 등 VM 기반 런타임 실행에 필요
용어 간 관계도
[쿠버네티스]
↓ CRI (gRPC)
[고수준 런타임: containerd / CRI-O]
│
├─ 이미지 관리 (OCI Image Spec)
├─ 네트워크 설정 (CNI)
├─ 스토리지 관리
│
↓ OCI Runtime Spec
[저수준 런타임: runc / gVisor / Kata]
│
├─ config.json 해석
├─ rootfs 마운트
│
↓ Linux Kernel
[격리 기술: Namespace / cgroups / seccomp]
│
↓
[격리된 컨테이너 프로세스]
핵심 정리
| 계층 | 구성요소 | 역할 |
|---|---|---|
| 오케스트레이션 | Kubernetes | 컨테이너 스케줄링, 서비스 관리 |
| 고수준 런타임 | containerd, CRI-O | 이미지/컨테이너/네트워크 관리 |
| 저수준 런타임 | runc, gVisor, Kata | 실제 격리 환경 생성 |
| 커널 | Namespace, cgroups | 프로세스 격리, 자원 제한 |
표준화의 핵심:
- OCI: 런타임, 이미지, 배포 표준화 → 상호 운용성 보장
- CRI: 쿠버네티스-런타임 인터페이스 → 런타임 교체 용이